package com.meng.jingtao.coupon.rabbitmq;

import com.meng.common.utils.ConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;


/**
 * @author xinqimeng
 * @version 1.0.0
 * @ClassName Producer.java
 * @Description TODO
 * @createTime 2022年02月10日 14:06:00
 */
@Slf4j
@Component
@RefreshScope
public class Producer implements CommandLineRunner{

    @Autowired
    private Consumer consumer;

    @Value("${rabbitmq.simple_queue}")
    private String queue;


    public static void sendMessage(String message) throws Exception {
        //创建连接
        Connection connection = ConnectionUtils.getConnection();
        //创建频道
        Channel channel = connection.createChannel();
        //声明(创建)队列
        /**
         * 参数1:队列名称
         * 参数2:是否定义持久化队列
         * 参数3:是否独占本次连接
         * 参数4:是否在不使用的时候自动删除队列
         * 参数5:队列其他参数
         */
        channel.queueDeclare("simple_queue",true,false,false,null);
        //要发送的消息
        //发送
        /**
         * 参数1:交换机名称,如果没有指定则使用默认Default Exchage
         * 参数2:路由key,简单模式可以传递队列名称
         * 参数3:消息其他属性
         * 参数4:消息内容
         */
        channel.basicPublish("","simple_queue", null,message.getBytes());
        System.out.println("消息发送成功"+message);
        //关闭资源
        channel.close();
        connection.close();
    }

    @Override
    public void run(String... args) throws Exception {
        consumer.init();
    }


}
